import traceback
import pyautogui
import time
import pyperclip as clip
import json
import pandas as pd
from datetime import datetime
from sqlalchemy import create_engine
import pypinyin
from bs4 import BeautifulSoup
import random
from jsjj.util.configUtil import *
from jsjj.util.emailUtil import *

modeName = ''
# 这段代码是不需要阿明插件的
# 原时旗舰店
# 立太友泰专卖店
# 第一种风格的店铺
shopName = '亿家达'


def saveJson(jsonFromPDD, con):
    print("******保存一次数据******")
    dfLoop = pd.read_json(json.dumps(jsonFromPDD['goods_list']))
    dfLoop = dfLoop.drop(
        columns=['icons', 'tag_list', 'p_rec', 'white_thumb_url', 'quantity', 'uniform_price', 'share_title',
                 'share_img'])
    dfLoop.rename(columns={'price': 'normal_price'}, inplace=True)
    dfLoop['分类'] = ''
    dfLoop['店铺名称'] = shopName
    dfLoop['阿明工具断点续传标志'] = '0'
    dfLoop['当前页数'] = '0'  # 亿家达 没有当前页数
    # 解决可能出现的超时问题bugfix 2020.08.18
    con.connection.connection.ping(reconnect=True)
    # 拼多多_竞争对手商品信息
    dfLoop.to_sql(name='拼多多_竞争对手商品信息_debug', con=con, if_exists='append', index=False)


# 尝试通过最安全的方式来获取拼多多【主网站】的商品信息
def SPGK(conn):
    # 保护措施，避免失控
    pyautogui.FAILSAFE = False
    # 为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
    pyautogui.PAUSE = 0.2

    # 左边--【物流工具】
    sleep(6)
    pyautogui.scroll(10000)
    # for z in range(1, int(10000 / 1000)):
    #     pyautogui.scroll(1000)
    #     sleep(0.1)

    sleep(4)
    pyautogui.keyDown('f12')
    pyautogui.keyUp('f12')

    # filter textbox
    pyautogui.moveTo(1522, 168, 2)
    pyautogui.doubleClick()

    #
    sleep(1)
    clip.copy('recommend/goods?')  # 先复制
    pyautogui.hotkey('ctrl', 'v')  # 再粘贴

    sleep(2)
    pyautogui.keyDown('f5')
    pyautogui.keyUp('f5')

    sleep(4)
    pyautogui.moveTo(1173, 629, 2)
    maxDeep = 80000  # 需要根据经验值计算
    for i in range(1, int(maxDeep / 1000)):
        pyautogui.scroll(-1000)
        sleep(0.3)

    shouldContinue = True

    # 上面的代码是第一次的获取
    # ===================================================大loop===================================================
    iLoopOuter = 1
    lGoodsIds = []

    innerLoop = 16
    for j in range(0, innerLoop):

        # 选中过滤文件（循环中，唯一有差别的地方）
        pyautogui.moveTo(1540, 325 + j * 21.5, 2)
        pyautogui.click()

        # 点中json值区域
        pyautogui.moveTo(1812, 497, 2)
        pyautogui.click()

        sleep(2)
        pyautogui.hotkey('ctrl', 'a')

        sleep(2)
        pyautogui.hotkey('ctrl', 'c')

        # bug fix，到第一个页面可能会被遮住
        pyautogui.moveTo(1571, 167, 2)

        # 读取剪切板内容query_cat_goods
        sleep(2)
        value = clip.paste()
        # 判断是否是json
        try:
            # json格式
            jsonFromPDD = json.loads(value)
            if jsonFromPDD['goods_list'][0]['goods_id'] not in lGoodsIds:
                saveJson(jsonFromPDD, conn)
                # 这里还缺少一个分支，就算是json格式，有可能是上一个重复的数据，因此在这里要判断小循环的数据是否重复了
                for k in range(0, len(jsonFromPDD['goods_list'])):
                    lGoodsIds.append(jsonFromPDD['goods_list'][k]['goods_id'])
            else:
                # 后续就不需要继续抓了，这样节约时间
                saveJson(jsonFromPDD, conn)
                print("******页数重复，所有循环结束******")
                # break

            # print(jsonFromPDD)
        except Exception as ex:
            # 非json格式
            print("出现如下异常%s" % ex)
            continue

    return


def executeCatchWeb(conn):
    try:
        SPGK(conn)
    except Exception as e:
        traceback.print_exc()
        sendAlert('【异常中断】' + modeName, '异常:' + str(e) + '|报错文件:' + os.path.split(__file__)[-1], engine, conn)
        print('【异常中断】' + modeName, '异常:' + str(e) + '|报错文件:' + os.path.split(__file__)[-1])
        return
    sendFinalSuccessEmail('●正常完成●' + modeName, '', engine, conn, modeName, runMode)


if __name__ == '__main__':
    # 连接database
    engine = create_engine('mysql+pymysql://jsbi:jsbi-1701@47.114.55.19:9011/biv1?charset=utf8')
    con = engine.connect()
    # 本函数调试用
    executeCatchWeb(con)
    pass
